package com.inei.cie.caratula;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import com.inei.cie.R;
import com.inei.cie.capituloix.CapituloIX_Activity;
import com.inei.cie.dao.CaratulaDao;
import com.inei.cie.entidades.PCar_C_1N;
import com.inei.cie.utilitarios.Variables;

public class Caratula_C_Item_Activity extends Activity {

	public Variables var;
	public String id_local;
	public int Nro_Pred;
	public int Nro_Visita;
	public Bundle b;
	public CaratulaDao caratula;
	public PCar_C_1N visita;
	public TextView tvLocal;
	public int men, mas;

	public String fechaLimite = "31/12/2013";

	public EditText etFechaVisita, etHoraDeVisita, etHoraAVisita, etFechaProx,
			etHoraProx, etOtroVisita, etOtroJB, etHoraDeJB, etHoraAJB,
			etFechaJB;
	public Spinner spResultadoVisita, spResultadoJB;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.caratula_c_item);

		IniciarComponentes();
	}

	public void IniciarComponentes() {
		men = 1;
		mas = 2;
		var = new Variables();
		caratula = new CaratulaDao(this);
		b = getIntent().getExtras();
		id_local = b.getString(var.ID_LOCAL);
		Nro_Pred = b.getInt(var.NRO_PRED);
		Nro_Visita = b.getInt(var.NRO_VISITA);

		tvLocal = (TextView) findViewById(R.id.tvLocal);
		tvLocal.setText("Local Nro. " + id_local + " - Visita Nro. "
				+ Nro_Visita);

		etFechaVisita = (EditText) findViewById(R.id.etFechaVisita);
		// etFechaVisita.setInputType(InputType.TYPE_NULL);
		etFechaVisita.setFocusable(false);
		etFechaVisita.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				EditText et = (EditText) v;
				AbrirCalendar(et.getText().toString(), et, 1, null);
			}
		});
		etHoraDeVisita = (EditText) findViewById(R.id.etHoraDeVisita);
		// etHoraDeVisita.setInputType(InputType.TYPE_NULL);
		etHoraDeVisita.setFocusable(false);
		etHoraDeVisita.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				EditText et = (EditText) v;
				AbrirTime(et.getText().toString(), et, 0, "");
			}
		});
		etHoraAVisita = (EditText) findViewById(R.id.etHoraAVisita);
		// etHoraAVisita.setInputType(InputType.TYPE_NULL);
		etHoraAVisita.setFocusable(false);
		etHoraAVisita.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				EditText et = (EditText) v;
				if (etHoraDeVisita.getText().toString().length() == 0) {
					Toast.makeText(Caratula_C_Item_Activity.this,
							"Debe ingresar la hora de inicio de la visita",
							Toast.LENGTH_SHORT).show();
				} else {
					AbrirTime(et.getText().toString(), et, 1, etHoraDeVisita
							.getText().toString());
				}
			}
		});
		etFechaProx = (EditText) findViewById(R.id.etFechaProx);
		// etFechaProx.setInputType(InputType.TYPE_NULL);
		etFechaProx.setFocusable(false);
		etFechaProx.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				EditText et = (EditText) v;
				if (etFechaVisita.getText().toString().length() != 0) {
					AbrirCalendar(et.getText().toString(), et, mas,
							etFechaVisita);
				} else {
					Toast.makeText(
							Caratula_C_Item_Activity.this,
							"Debe ingresar primero la fecha de visita del evaluador tecnico",
							Toast.LENGTH_SHORT).show();
				}
			}
		});
		etHoraProx = (EditText) findViewById(R.id.etHoraProx);
		// etHoraProx.setInputType(InputType.TYPE_NULL);
		etHoraProx.setFocusable(false);
		etHoraProx.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				EditText et = (EditText) v;
				AbrirTime(et.getText().toString(), et, 0, "");
			}
		});
		etOtroVisita = (EditText) findViewById(R.id.etOtroVisita);
		etOtroJB = (EditText) findViewById(R.id.etOtroJB);
		etHoraDeJB = (EditText) findViewById(R.id.etHoraDeJB);
		// etHoraDeJB.setInputType(InputType.TYPE_NULL);
		etHoraDeJB.setFocusable(false);
		etHoraDeJB.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				EditText et = (EditText) v;
				AbrirTime(et.getText().toString(), et, 0, "");
			}
		});
		etHoraAJB = (EditText) findViewById(R.id.etHoraAJB);
		// etHoraAJB.setInputType(InputType.TYPE_NULL);
		etHoraAJB.setFocusable(false);
		etHoraAJB.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				EditText et = (EditText) v;
				if (etHoraDeJB.getText().toString().length() == 0) {
					Toast.makeText(Caratula_C_Item_Activity.this,
							"Debe ingresar la hora de inicio de la visita",
							Toast.LENGTH_SHORT).show();
				} else {
					AbrirTime(et.getText().toString(), et, 1, etHoraDeJB
							.getText().toString());
				}
			}
		});
		etFechaJB = (EditText) findViewById(R.id.etFechaJB);
		// etFechaJB.setInputType(InputType.TYPE_NULL);
		etFechaJB.setFocusable(false);
		etFechaJB.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				EditText et = (EditText) v;
				AbrirCalendar(et.getText().toString(), et, men, null);
			}
		});

		spResultadoVisita = (Spinner) findViewById(R.id.spResultadoVisita);
		spResultadoVisita
				.setOnItemSelectedListener(new OnItemSelectedListener() {
					@Override
					public void onItemSelected(AdapterView<?> arg0, View v,
							int pos, long arg3) {
						// TODO Auto-generated method stub
						if (pos == 5) {
							etOtroVisita.setEnabled(true);
						} else {
							etOtroVisita.setEnabled(false);
							etOtroVisita.setText("");
						}
					}

					@Override
					public void onNothingSelected(AdapterView<?> arg0) {
						// TODO Auto-generated method stub

					}
				});
		spResultadoJB = (Spinner) findViewById(R.id.spResultadoJB);
		spResultadoJB.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> arg0, View arg1, int pos,
					long arg3) {
				// TODO Auto-generated method stub

				if (pos == 5) {
					etOtroJB.setEnabled(true);
				} else {
					etOtroJB.setEnabled(false);
					etOtroJB.setText("");
				}
			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				// TODO Auto-generated method stub
			}
		});
		etOtroVisita.setEnabled(false);
		etOtroJB.setEnabled(false);
		CargarData();
	}

	public void CargarData() {
		visita = caratula.ObtenerVisita(id_local, Nro_Pred, Nro_Visita);
		if (visita != null) {
			etFechaVisita.setText(visita.getPC_C_1_Et_Fecha());
			etHoraDeVisita.setText(visita.getPC_C_1_Et_Hini());
			etHoraAVisita.setText(visita.getPC_C_1_Et_Hfin());
			etFechaProx.setText(visita.getPC_C_1_Et_Fecha_Prox());
			etHoraProx.setText(visita.getPC_C_1_Et_Hora_Prox());
			spResultadoVisita.setSelection(visita.getPC_C_1_Et_Res());
			if (visita.getPC_C_1_Et_Res_O() != null) {
				etOtroVisita.setText(visita.getPC_C_1_Et_Res_O().toUpperCase());
			}
			etFechaJB.setText(visita.getPC_C_1_Jb_Fecha());
			etHoraDeJB.setText(visita.getPC_C_1_Jb_Hini());
			etHoraAJB.setText(visita.getPC_C_1_Jb_Hfin());
			spResultadoJB.setSelection(visita.getPC_C_1_Jb_Res());
			if (visita.getPC_C_1_Jb_Res_O() != null) {
				etOtroJB.setText(visita.getPC_C_1_Jb_Res_O().toUpperCase());
			}
		} else {
			visita = new PCar_C_1N();
			visita.setId_local(id_local);
			visita.setPC_F_1(Nro_Pred);
			visita.setPC_C_1_NroVis(Nro_Visita);
		}
	}

	public boolean GuardarData() {
		visita.setPC_C_1_Et_Fecha(etFechaVisita.getText().toString());
		visita.setPC_C_1_Et_Hini(etHoraDeVisita.getText().toString());
		visita.setPC_C_1_Et_Hfin(etHoraAVisita.getText().toString());
		visita.setPC_C_1_Et_Fecha_Prox(etFechaProx.getText().toString());
		visita.setPC_C_1_Et_Hora_Prox(etHoraProx.getText().toString());
		visita.setPC_C_1_Et_Res(spResultadoVisita.getSelectedItemPosition());
		visita.setPC_C_1_Et_Res_O(etOtroVisita.getText().toString()
				.toUpperCase());
		visita.setPC_C_1_Jb_Fecha(etFechaJB.getText().toString());
		visita.setPC_C_1_Jb_Hini(etHoraDeJB.getText().toString());
		visita.setPC_C_1_Jb_Hfin(etHoraAJB.getText().toString());
		visita.setPC_C_1_Jb_Res(spResultadoJB.getSelectedItemPosition());
		visita.setPC_C_1_Jb_Res_O(etOtroJB.getText().toString().toUpperCase());
		visita.setSwCompleto(1);
		if (etFechaVisita.getText().toString().trim().equals("")) {
			etFechaVisita.requestFocus();
			Toast.makeText(this, "Debe ingresar la fecha de visita",
					Toast.LENGTH_SHORT).show();
			return false;
		} else if (etHoraDeVisita.getText().toString().trim().equals("")) {
			etHoraDeVisita.requestFocus();
			Toast.makeText(this,
					"Debe ingresar la hora de inicio de la visita",
					Toast.LENGTH_SHORT).show();
			return false;
		} else {
			if (caratula.GuardarVisita(visita)) {
				return true;
			} else {
				Toast.makeText(this, "No se pudo guardar", Toast.LENGTH_SHORT)
						.show();
				return false;
			}
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		getMenuInflater().inflate(R.menu.menu_activity_for_result, menu);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		switch (item.getItemId()) {
		case R.id.mnSalir:
			AlertDialog.Builder dialogo1 = new AlertDialog.Builder(this);
			dialogo1.setTitle("Importante");
			dialogo1.setMessage("Deseas Salir?");
			dialogo1.setIcon(android.R.drawable.ic_dialog_alert);
			dialogo1.setCancelable(false);
			dialogo1.setPositiveButton("Si",
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialogo1, int id) {
							System.exit(0);
						}
					});

			dialogo1.setNegativeButton("No",
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialogo1, int id) {
							return;
						}
					});
			dialogo1.show();
			break;
		case R.id.mnAceptar:
			if (GuardarData()) {
				setResult(RESULT_OK);
				finish();
			}
			break;
		case R.id.mnCancelar:
			setResult(RESULT_CANCELED);
			finish();
			break;
		case R.id.mnFoto:
			Intent foto = new Intent(Caratula_C_Item_Activity.this,
					CapituloIX_Activity.class);
			b.putBoolean("pregunta", true);
			foto.putExtras(b);
			startActivity(foto);
			break;
		default:
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	public void AbrirCalendar(String f, final EditText et, final int sw,
			final EditText et1) {

		final Calendar c = Calendar.getInstance();
		int dia = c.get(Calendar.DAY_OF_MONTH);
		int mes = c.get(Calendar.MONTH);
		int anio = c.get(Calendar.YEAR);
		if (f.length() != 0) {
			String[] valores = f.split("/");
			dia = Integer.parseInt(valores[0]);
			mes = Integer.parseInt(valores[1]) - 1;
			anio = Integer.parseInt(valores[2]);
		}
		DatePickerDialog fecha = new DatePickerDialog(this,
				new OnDateSetListener() {

					@Override
					public void onDateSet(DatePicker view, int year,
							int monthOfYear, int dayOfMonth) {
						// TODO Auto-generated method stub
						c.set(Calendar.YEAR, year);
						c.set(Calendar.MONTH, monthOfYear);
						c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
						SimpleDateFormat sdf = new SimpleDateFormat(
								"dd/MM/yyyy", Locale.US);
						if (sw == men) {
							if (!CompararFechasMenos(sdf.format(Calendar
									.getInstance().getTime()), sdf.format(c
									.getTime()))) {
								Toast.makeText(
										Caratula_C_Item_Activity.this,
										"La fecha ingresada no puede ser mayor a la fecha actual",
										Toast.LENGTH_SHORT).show();
							} else {
								/*if (!CompararFechasMenos(fechaLimite,
										sdf.format(c.getTime()))) {
									Toast.makeText(
											Caratula_C_Item_Activity.this,
											"La fecha ingresada no puede ser mayor al "
													+ fechaLimite,
											Toast.LENGTH_SHORT).show();
								} else {*/
									et.setText(sdf.format(c.getTime()));
								//}
							}
						} else if (sw == mas) {
							String cmp = "";
							if (et1 == null) {
								cmp = sdf.format(Calendar.getInstance()
										.getTime());
							} else {
								cmp = et1.getText().toString();
							}
							if (!CompararFechasMas(cmp, sdf.format(c.getTime()))) {
								Toast.makeText(
										Caratula_C_Item_Activity.this,
										"La fecha ingresada no puede ser menor o igual a la fecha actual",
										Toast.LENGTH_SHORT).show();
							} else {

								/*if (!CompararFechasMenos(fechaLimite,
										sdf.format(c.getTime()))) {
									Toast.makeText(
											Caratula_C_Item_Activity.this,
											"La fecha ingresada no puede ser mayor al "
													+ fechaLimite,
											Toast.LENGTH_SHORT).show();
								} else {*/
									et.setText(sdf.format(c.getTime()));
								//}
							}
						}
					}
				}, anio, mes, dia);
		fecha.setButton(DatePickerDialog.BUTTON_NEUTRAL, "Borrar",
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface arg0, int arg1) {
						// TODO Auto-generated method stub
						et.setText("");
					}
				});
		fecha.show();
	}

	public boolean CompararHoras(String h1, String h2) {
		try {
			String hora1[] = h1.split("\\:");
			String hora2[] = h2.split("\\:");

			if (Integer.parseInt(hora1[0]) > Integer.parseInt(hora2[0])) {
				return false;
			} else if (Integer.parseInt(hora1[0]) == Integer.parseInt(hora2[0])) {
				if (Integer.parseInt(hora1[1]) >= Integer.parseInt(hora2[1])) {
					return false;
				}
			}

			return true;
		} catch (Exception e) {
			Toast.makeText(this, "Error al comparar horas", Toast.LENGTH_SHORT)
					.show();
			return false;
		}
	}

	public boolean CompararFechasMas(String f1, String f2) {
		try {
			String[] fecha1 = f1.split("/");
			String[] fecha2 = f2.split("/");
			if (fecha1[2].compareTo(fecha2[2]) > 0) {
				return false;
			} else if (fecha1[2].compareTo(fecha2[2]) == 0) {
				if (fecha1[1].compareTo(fecha2[1]) > 0) {
					return false;
				} else if (fecha1[1].compareTo(fecha2[1]) == 0) {
					if (fecha1[0].compareTo(fecha2[0]) > 0) {
						return false;
					}
				}
			}
			return true;
		} catch (Exception e) {
			Toast.makeText(this, "Error al comparar fechas", Toast.LENGTH_SHORT)
					.show();
			return false;
		}
	}

	public boolean CompararFechasMenos(String f1, String f2) {
		try {
			String[] fecha1 = f1.split("/");
			String[] fecha2 = f2.split("/");
			if (fecha1[2].compareTo(fecha2[2]) < 0) {
				return false;
			} else if (fecha1[2].compareTo(fecha2[2]) == 0) {
				if (fecha1[1].compareTo(fecha2[1]) < 0) {
					return false;
				} else if (fecha1[1].compareTo(fecha2[1]) == 0) {
					if (fecha1[0].compareTo(fecha2[0]) < 0) {
						return false;
					}
				}
			}

			return true;
		} catch (Exception e) {
			Toast.makeText(this, "Error al comparar fechas", Toast.LENGTH_SHORT)
					.show();
			return false;
		}
	}

	public void AbrirTime(String h, final EditText et, final int sw,
			final String h1) {

		final Calendar c = Calendar.getInstance();
		int horas = c.get(Calendar.HOUR_OF_DAY);
		int minutos = c.get(Calendar.MINUTE);
		if (h.length() != 0) {
			String valores[] = h.split(":");
			horas = Integer.parseInt(valores[0]);
			minutos = Integer.parseInt(valores[1]);
		}

		TimePickerDialog hora = new TimePickerDialog(this,
				new OnTimeSetListener() {

					@Override
					public void onTimeSet(TimePicker view, int hourOfDay,
							int minute) {
						// TODO Auto-generated method stub
						c.set(Calendar.HOUR_OF_DAY, hourOfDay);
						c.set(Calendar.MINUTE, minute);

						SimpleDateFormat sdf = new SimpleDateFormat("HH:mm",
								Locale.US);

						if (sw == 0) {
							et.setText(sdf.format(c.getTime()));
						} else if (sw == 1) {
							if (CompararHoras(h1, sdf.format(c.getTime()))) {
								et.setText(sdf.format(c.getTime()));
							} else {
								Toast.makeText(
										Caratula_C_Item_Activity.this,
										"La segunda hora debe ser mayor a la primera",
										Toast.LENGTH_SHORT).show();
							}
						}
					}
				}, horas, minutos, true);

		hora.setButton(DatePickerDialog.BUTTON_NEUTRAL, "Borrar",
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface arg0, int arg1) {
						// TODO Auto-generated method stub
						et.setText("");
					}
				});
		hora.show();
	}
}
